package org.six;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.zip.*;

/**
 * Created by Administrator on 2016/3/14 0014.
 */
public class MyWindow {
    public static void main(String[] args) {
        JFrame f = new JFrame("我的窗口");      // 创建一个窗口
        f.setSize(300, 200);         // 设置窗口的大小
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口则退出程序
        f.setLayout(null);      // 设定不需要魔人布局，绝对定位布局
        f.setResizable(false);  // 不允许重设大小
        f.setLocationRelativeTo(null);      // 设定在屏幕中央出现

        JTextField path = new JTextField();     // 文本框
        path.setBounds(50, 50, 200, 25);         // 设置文本框的位置和大小

        JButton ok = new JButton("OK");   // 创建一个按钮
        ok.setBounds(100, 20, 100, 25);            // 设定按钮的高宽和位置

        // 设定按钮点击的时候，触发
        ok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser jfc = new JFileChooser(System.getProperty("user.dir"));

                int returnVal = jfc.showOpenDialog(jfc);        // 获得选中后的值
                if (returnVal == JFileChooser.APPROVE_OPTION) { // 如果值为应用
                    String filePath = jfc.getSelectedFile().getAbsolutePath();//这个就是你选择的文件夹的路径
                    path.setText(filePath);
                }
            }
        });

        JButton zip = new JButton("压缩");        // 压缩按钮
        zip.setBounds(100, 80, 100, 25);          // 设定压缩按钮的位置和大小
        zip.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String form = path.getText();       // 带压缩文件路径
                File file = new File(form);         // 新建一个文件
                String to = file.getParent() + File.separator + file.getName() + ".zip";  // 压缩路径

                try (
                        InputStream is = new FileInputStream(file);
                        ZipOutputStream zos = new ZipOutputStream( new FileOutputStream(to));
                ){
                    // 给压缩序列添加一个文件
                    zos.putNextEntry( new ZipEntry( file.getName() ));
                    byte[] b = new byte[1024];
                    int count = 0;
                    double size = is.available();        // 总大小
                    int totalCount = 0;
                    while ( (count = is.read(b)) != -1 ) {
                        totalCount += count;
                        System.out.printf("已压缩：%4.2f ％\n", totalCount / size * 100 );
                        zos.write(b,0,count);
                    }

                    JOptionPane.showMessageDialog(null,"已压缩完");
                    Runtime.getRuntime().exec("explorer " + file.getParent());
                } catch ( IOException ex ) {
                    ex.printStackTrace();
                }
            }
        });


        f.add(ok);                  // 将按钮显示到窗口中
        f.add(path);                // 将文本框显示到窗口中
        f.add(zip);                 // 将压缩按钮添加到窗口中
        // 让窗口显示出来
        f.setVisible(true);
    }
}
